#pragma once
#include "../comm/log.hpp"
#include <mysql/mysql.h>
#include <iostream>
#include <string>

using namespace ns_log;

class MysqlConn
{
public:
    MysqlConn(){}
    MysqlConn(const std::string &host,const std::string& user, const std::string& passwd, const std::string& db){
        //连接mysql
        Connection(host,user,passwd,db);
        //设置中文字符集
        mysql_set_character_set(my,"utf8");
    }
    ~MysqlConn(){
        mysql_close(my);
    }
private:
    //连接mysql
    void Connection(const std::string &host,const std::string& user, const std::string& passwd, const std::string& db)
    {
        //初始化句柄
        my = mysql_init(nullptr);

        //建立连接
        if(!mysql_real_connect(my,host.c_str(),user.c_str(),passwd.c_str(),db.c_str(),3306,nullptr,0))
        {
            //连接建立失败的情况
            LOG(FATAL) << "连接mysql服务器失败" << "\n";
            return;
        }
    }
public:
    // 获取结果,注意:这个函数的返回值需要用户手动释放!!
    MYSQL_RES* executeSql(const std::string &sql)
    {
        // 执行sql语句
        if(0 != mysql_query(my, sql.c_str()))
        {
            LOG(ERROR) << "mysql 执行 " << sql << " 失败!!!" << "\n";
            return nullptr;
        }
        
        // 提取结果
        MYSQL_RES *res = mysql_store_result(my);
        return res;
    }
private:
    MYSQL *my;
};